// 子模块moduleA路径：store/modules/moduleA.js 
export default {
    namespaced: true,
    state: {
        // list: [
        //     // {商品id，商品名称，商品价格，商品描述，商品标题，购买的数量，选中状态....}
        //     // {商品id，商品名称，商品价格，商品描述，商品标题，购买的数量，选中状态....}
        //     // {商品id，商品名称，商品价格，商品描述，商品标题，购买的数量，选中状态....}
        // ]
        list: uni.getStorageSync("goods") || []
    },
    getters: {
        getTotal (state) {
            let sum = 0
            state.list.forEach(item => sum += item.number)
            return sum
        },
        // 获取购物车中选中的商品
        getAllCheckedTrue (state, getters) {
            // 过滤所有的选中状态为true的项
            return state.list.filter(item => item.checked)
        },
        // 获取总价
        getTotalPrice (state, getters) {
            return getters.getAllCheckedTrue.reduce((s, v) => s + v.goods_price * v.number, 0)
        },
        // 获取总数量
        getTotalNum (state, getters) {
            // 使用getters中其它函数  需要传入getters形参，通过getters点出来那个属性
            return getters.getAllCheckedTrue.reduce((s, v) => s + v.number, 0)
        },
        // 判断是否需要全选
        allChecked (state, getters) {
            return state.list.length === getters.getAllCheckedTrue.length
        }

    },
    mutations: {
        // 添加购物车
        addCart (state, payload) {
            // 寻找list数组中有没有这种商品，找到就返回下标说明买过，找不到返回-1，说明没有这种商品
            const index = state.list.findIndex(item => item.goods_id === payload.goods_id)
            if (index === -1) {
                // 没买过
                // 往数组中添加该商品
                state.list.push({ ...payload, number: 1, checked: true })
            } else {
                // 买过
                // 找到数组买过的那种商品的属性数量加1
                state.list[index].number++
            }
            // console.log(state.list)
            // 存储本地，防止刷新后丢失数据
            uni.setStorageSync("goods", state.list)
        },
        // 购物车每一项的复选框选择状态，实现动态切换需要给它的值取反
        toggleGoodsChecked (state, payload) {
            // 选中状态取反
            state.list[payload].checked = !state.list[payload].checked
            // 存储本地，防止刷新后丢失数据
            uni.setStorageSync("goods", state.list)
        },
        // 全选按钮
        changeItemChecked (state, payload) {
            // 将数组中所有元素的选中状态改为与全选中按钮的一致
            state.list.forEach(item => item.checked = payload)
            // 存储本地，防止刷新后丢失数据
            uni.setStorageSync("goods", state.list)
        },
        editNum (state, payload) {
            // console.log("editNum触发了")
            state.list[payload.index].number += payload.count
        }
    },
    actions: {

    }
}